本文源码请见我的GitHub
3.5.1 选择处理方法|
一般有两种方法:一种方法是通过覆盖全局的掩码表示缺失值,另一种方法是标签值表示缺失值
掩码:可能是一个与原装数组维度相同的完整布尔类型数组,也可能是一个用比特表示有缺陷的局部状态。
标签 可能是一个具体的数字,也可能是一些极少出现的形式,也有可能是全局的值。
3.5.2 Pandas 的缺失+值
1.None:Python对象类型的缺失值 object 类型
2.NaN: 数值类型的缺失值 : 不是一个数字
3.区别: 可以等价|
3.5.3 处理缺失值 import!!
1. 发现缺失值 isnull() notnull()
1 | import pandas as pd |
1 | data = pd.Series([1,np.nan, 'eh', None]) |
0 False
1 True
2 False
3 True
dtype: bool
1 | #布尔类型的掩码数组可以直接作为Series或DataFrame的索引使用 |
0 1
2 eh
dtype: object
2.剔除缺失值
1 | data.dropna() |
0 1
2 eh
dtype: object
1 | data |
0 1
1 NaN
2 eh
3 None
dtype: object
1 | #dataframe上要进行一些设置才可以使用 |
0 | 1 | 2 | |
---|---|---|---|
0 | 1.0 | NaN | 2 |
1 | 2.0 | 3.0 | 5 |
2 | NaN | 4.0 | 6 |
不能从dataFrame中单独剔除一个值,要么去掉一个整行或者一个整列。 dropna()默认是去掉一整行
1 | df.dropna() |
0 | 1 | 2 | |
---|---|---|---|
1 | 2.0 | 3.0 | 5 |
1 | df.dropna(axis=1) #去掉列 |
2 | |
---|---|
0 | 2 |
1 | 5 |
2 | 6 |
1 | df.dropna(axis=0) |
0 | 1 | 2 | |
---|---|---|---|
1 | 2.0 | 3.0 | 5 |
1 | #行列全部去掉 |
0 | 1 | 2 | |
---|---|---|---|
0 | 1.0 | NaN | 2 |
1 | 2.0 | 3.0 | 5 |
2 | NaN | 4.0 | 6 |
3. 填充默认值
1 | data = pd.Series([1, np.nan, 2, None, 3], index = list('abces')) |
a 1.0
b NaN
c 2.0
e NaN
s 3.0
dtype: float64
1 | data.fillna(99)# use99 to fill nan |
a 1.0
b 99.0
c 2.0
e 99.0
s 3.0
dtype: float64
1 | #也可以用缺失值前面的有效值进行从前往后的填充 forward-fill |
a 1.0
b 1.0
c 2.0
e 2.0
s 3.0
dtype: float64
1 | #从后往前填充 back-fill |
a 1.0
b 2.0
c 2.0
e 3.0
s 3.0
dtype: float64
1 | df.fillna(method='ffill') |
0 | 1 | 2 | |
---|---|---|---|
0 | 1.0 | NaN | 2 |
1 | 2.0 | 3.0 | 5 |
2 | 2.0 | 4.0 | 6 |
1 | df.fillna(method='ffill', axis= 1) |
0 | 1 | 2 | |
---|---|---|---|
0 | 1.0 | 1.0 | 2.0 |
1 | 2.0 | 3.0 | 5.0 |
2 | NaN | 4.0 | 6.0 |